#include<iostream>
#include<unistd.h>
#include<signal.h>



#include<iostream>
#include<unistd.h>
#include<signal.h>

//打印当前pending信号集
void printsig(sigset_t p)
{
    std::cout<<getpid()<<"  ";
    for(int i=31;i>0;i--)
    {
        if(sigismember(&p,i))
            std::cout<<"1";
        else
            std::cout<<"0";
    }
    std::cout<<std::endl;
}

int main()
{
   
    sigset_t s,p;//创建信号集
    sigemptyset(&s);//清空信号集
    for(int i=1;i<32;i++)
    {
        sigaddset(&s,i);//向信号集内添加有效信号
    }
    sigprocmask(SIG_BLOCK,&s,nullptr);//这里我们不需要记录原信号屏蔽字

    while(true)
    {
        sleep(1);
        sigpending(&p);//获取当前进程pending信号集
        printsig(p);//打印pending信号集
    }

    return 0;
}

// //打印当前pending信号集
// void printsig(sigset_t p)
// {
//     std::cout<<getpid()<<"  ";
//     for(int i=31;i>0;i--)
//     {
//         if(sigismember(&p,i))
//             std::cout<<"1";
//         else
//             std::cout<<"0";
//     }
//     std::cout<<std::endl;
// }

// int main()
// {
   
//     sigset_t s,p;//创建信号集
//     sigemptyset(&s);//清空信号集
//     sigaddset(&s,2);//向信号集内添加有效信号2
//     sigaddset(&s,3);//添加3

//     sigprocmask(SIG_BLOCK,&s,nullptr);//这里我们不需要记录原信号屏蔽字

//     while(true)
//     {
//         sleep(1);
//         sigpending(&p);//获取当前进程pending信号集
//         printsig(p);//打印pending信号集
//     }

//     return 0;
// }